//
//  UIImage+WB.m
//  WhichBank
//
//  Created by h1r0 on 15/9/6.
//  Copyright (c) 2015年 lettai. All rights reserved.
//

#import "UIImage+TL.h"

@implementation UIImage (TL)

+ (UIImage *)imageWithColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);
    UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return theImage;
}

+ (UIImage *)pdfImageWithPath:(NSString *)filePath pageNumber:(NSInteger)index
{
    //1.读取pdf文件
    NSURL *dataPath = [NSURL fileURLWithPath:filePath];//filePath为文件路径
    CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef) dataPath);//这里只列出其中一种读取方法
    //2.获取某一页pdf
    
    CGPDFPageRef page = CGPDFDocumentGetPage(pdf, index);//index为想要读取的页面，下标从1开始。
    if (!page) {
        CGPDFDocumentRelease(pdf);
        return nil;
    }
    //3.获取当前页面的旋转角度，重新生成Rect
    int angle = CGPDFPageGetRotationAngle(page);//如果不处理这个角度，图片会自动校成竖向长方形
    CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
    //关键点1：重新生成Rect。不重新生成，绘制的内容和边框长宽不吻合
    if (angle == 90 || angle == 270) {//横向矩形页面，页面顶端在左、右的情况
        CGRect xxrect = pageRect;
        xxrect.size.width = pageRect.size.height;
        xxrect.size.height = pageRect.size.width;
        pageRect = xxrect;
    }
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGFloat scale = 1;//图片缩放系数，如果需要可以写到方法参数中。或者[UIScreen mainScreen].scale
    CGSize pdfSize = pageRect.size;
    CGContextRef ctx = CGBitmapContextCreate(NULL, pdfSize.width * scale, pdfSize.height * scale, 8, 0, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst);//0为相对于原pdf的角度。注意：旋转的角度必须为90的倍数
    if (!ctx) {
        CGColorSpaceRelease(colorSpace);
        CGPDFDocumentRelease(pdf);
        return nil;
    }
    // 设置背景色
    CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0);
    CGContextFillRect(ctx, CGRectMake(0, 0, pdfSize.width * scale, pdfSize.height * scale));
    CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh);
    
    CGContextScaleCTM(ctx, scale, scale);//关键点2：如果不旋转，绘制的内容会自动校正方向。可以理解为强制绘制成原本的角度？希望大神可以解答
    CGContextTranslateCTM(ctx, -pageRect.origin.x, -pageRect.origin.y);//镜像
    
    CGContextSaveGState(ctx);
    CGAffineTransform pdfTrans = CGPDFPageGetDrawingTransform(page, kCGPDFMediaBox, CGRectMake(0, 0, pdfSize.width, pdfSize.height), 0, YES);
    CGContextConcatCTM(ctx, pdfTrans);
    
    CGContextDrawPDFPage(ctx, page);
    CGContextRestoreGState(ctx);
    CGPDFDocumentRelease(pdf);
    CGImageRef image = CGBitmapContextCreateImage(ctx);
    UIImage *pdfImage = [[UIImage alloc] initWithCGImage:image];
    CGImageRelease(image);
    CGContextRelease(ctx);
    CGColorSpaceRelease(colorSpace);
    
    return pdfImage;
}

@end
